package Demo_Old.Demo;

import java.util.HashSet;
import java.util.TreeSet;

public class HashSetDemo {

    //TreeSet是有序的唯一的，集合元素需要是同一种类型并且继承Comparable接口，
    //        会进行排序，用红黑树实现(类似于平衡二叉排序树)，
    //        查找效率(相等于二分查找效率O(log^n))高于list(O(n))但低于HashSet(最快O(1))
    //HashSet是无序的唯一的，集合元素会根据hashCode()和equals()进行比较
    /*
     *树中的元素是要默认进行排序操作的，如果是基本数据类型，自动比较，
     *                              如果是引用类型的话，需要自定义比较器
     *       比较器分类：
     *         内部比较器
     *               定义在元素的类中，通过实现comparable接口来进行实现
     *         外部比较器
     *               定义在当前类中，通过实现comparator接口来实现，但是要将该比较器传递到集合中
     *         注意：外部比较器可以定义成一个工具类，此时所有需要比较的规则如果一致的话，可以复用，而
     *               内部比较器只有在存储当前对象的时候才可以使用
     *               如果两者同时存在，使用外部比较器
     *               当使用比较器的时候，不会调用equals方法
     * */

    public static void main(String[] args) {


       HashSet set=new HashSet();
        set.add(new Person("lim",20));
        set.add(new Person("lio",22));
        set.add(new Person("lip",24));
        set.add(new Person("lim",20));
        System.out.println(set);
//        set.add(10);
//        set.add(5);
//        set.add(6);
//        set.add(9);
//        System.out.println(set);

       TreeSet treeSet1=new TreeSet();
//        treeSet1.add(new Person("lim",20));
//        treeSet1.add(new Person("lio",22));
//        treeSet1.add(new Person("lip",24));
//        treeSet1.add(new Person("liy",20));
//        System.out.println(treeSet1.contains(new Person("ll",23)));


//        TreeSet treeSet2=new TreeSet(new Comparator<Person>() {
//            @Override
//            public int compare(Person o1, Person o2) {
//                if(o1.getAge()>o2.getAge())
//                    return 1 ;
//                if(o1.getAge()<o2.getAge())
//                    return -1;
//                return 0;
//            }
//        });
//        treeSet2.add(new Person("lim",20));
//        treeSet2.add(new Person("lio",22));
//        treeSet2.add(new Person("lip",24));
//        treeSet2.add(new Person("liy",20));
//        System.out.println(treeSet2);

        //TreeSet要求元素的类型相同，并且元素是排序的
//        TreeSet treeSet = new TreeSet();
//        treeSet.add(10);
//        treeSet.add(5);
//        treeSet.add(6);
//        System.out.println(treeSet.ceiling(4));
//        System.out.println(treeSet);

//        Iterator iterator = set.iterator();
//
//        for (Object o : set) {
//            System.out.println(o);
//        }
    }
    
}
